CREATE OR REPLACE TRIGGER "FLEX_USER_NBS" 
AFTER INSERT OR UPDATE OR DELETE ON nbs.empresas_usuarios
FOR EACH ROW
DECLARE
  tDesc INTRA.PRT_ATUALIZACAO.TXDESCRICAO_ATLZ%TYPE;
  tSenha INTRA.PRT_USUARIO.TXSENHA_USUA%TYPE;
  tStat INTRA.PRT_USUARIO.FGSTATUS_USUA%TYPE;
  tUsu INTRA.PRT_USUARIO.COD_USUA%TYPE;
  tTmp varchar2(20);
  tDDD INTRA.PRT_USUARIOTELEFONE.TXDDD_USTE%TYPE;
  tTel INTRA.PRT_USUARIOTELEFONE.TXTELEFONE_USTE%TYPE;
  tLogin INTRA.PRT_USUARIO.TXLOGIN_USUA%TYPE;

BEGIN
    IF INSERTING THEN
      tSenha := 'a92139bc7f9fed90f506ec9f03650495'; -- senhaeb
      IF (:new.DEMITIDO = 'S') THEN tStat := 'E'; ELSE tStat := 'A'; END IF;
      IF ( :new.EMAIL is NULL AND :new.RE is NULL AND :new.CPF is NULL ) THEN tStat := 'E'; END IF;
      IF (:new.EMAIL is NULL) THEN tLogin := :new.NOME; ELSE tLogin := :new.EMAIL; END IF;
      INSERT INTO intra.prt_usuario (COD_EMPR,COD_UNID,COD_USUA,COD_CRIADOR_USUA,COD_ALTERADOR_USUA,COD_DEPT,TMPSENHA,TXNOME_USUA,
        TXLOGIN_USUA,TXSENHA_USUA,TXEMAIL_USUA,DTNASCIMENTO_USUA,DTENTRADA_USUA,DTSAIDA_USUA,DTCADASTRO_USUA,DTALTERACAO_USUA,
        FGSTATUS_USUA,COD_SETR,TXRAMAL_USUA,TXNICKNAME_USUA,TXMSN_USUA,FGTIPO_USUA,MATRICULA_FUNCIONARIO,FGPASSCHANGE_USUA,CPF_USUA )
        VALUES (1,:new.COD_EMPRESA,INTRA.S_USUA.nextval,1,1,((:new.COD_EMPRESA * 1000) + :new.COD_EMPRESA_DEPARTAMENTO),:new.NOME,:new.NOME_COMPLETO,
        tLogin,tSenha,:new.EMAIL,:new.DT_NASCIMENTO,:new.DT_ADMISSAO,:new.DT_DEMISSAO,SYSDATE,SYSDATE,
        tStat,'',:new.RE,'','','U','','S',:new.CPF) Returning COD_USUA Into tUsu;
      IF (:new.FONE is not NULL) THEN
        tTmp := regexp_replace(:new.FONE,'[^0-9]','');
        tDDD := substr(tTmp, 0, 2);
        tTel := substr(tTmp, -8, 8);
        --SELECT COD_USUA INTO tUsu FROM intra.prt_usuario WHERE COD_EMPR = 1 AND TMPSENHA = :new.NOME;
        DELETE FROM intra.prt_usuariotelefone WHERE COD_EMPR = 1 AND COD_USUA = tUsu;
        INSERT INTO intra.prt_usuariotelefone ( COD_USUA,COD_EMPR,COD_USTE,TXDDD_USTE,TXTELEFONE_USTE,TXRAMAL_USTE,TXTIPO_USTE,FGSTATUS_USTE )
          VALUES (tUsu,1,INTRA.S_USTE.nextval,tDDD,tTel,'','C','A');
      END IF;
      tDesc := 'inclusao de usuario: ' || :new.NOME;
    ELSIF UPDATING THEN
      IF (:new.DEMITIDO = 'S') THEN tStat := 'E'; ELSE tStat := 'A'; END IF;
      IF ( :new.EMAIL is NULL AND :new.RE is NULL AND :new.CPF is NULL ) THEN tStat := 'E'; END IF;
      IF (:new.EMAIL is NULL) THEN tLogin := :new.NOME; ELSE tLogin := :new.EMAIL; END IF;
      UPDATE intra.prt_usuario SET
        COD_UNID = :new.COD_EMPRESA,
        COD_ALTERADOR_USUA = 1,
        COD_DEPT = ((:new.COD_EMPRESA * 1000) + :new.COD_EMPRESA_DEPARTAMENTO),
        TMPSENHA = :new.NOME,
        TXNOME_USUA = :new.NOME_COMPLETO,
        TXLOGIN_USUA = tLogin,
        TXEMAIL_USUA = :new.EMAIL,
        DTNASCIMENTO_USUA = :new.DT_NASCIMENTO,
        DTENTRADA_USUA = :new.DT_ADMISSAO,
        DTSAIDA_USUA = :new.DT_DEMISSAO,
        DTALTERACAO_USUA = SYSDATE,
        FGSTATUS_USUA = tStat,
        TXRAMAL_USUA = :new.RE,
        FGTIPO_USUA = 'U',
        CPF_USUA = :new.CPF
        WHERE COD_EMPR = 1 AND TMPSENHA = :old.NOME Returning Min(COD_USUA) Into tUsu;
      IF (:new.FONE is not NULL) THEN
        IF LENGTH(:new.FONE) > 8 THEN
        tTmp := regexp_replace(:new.FONE,'[^0-9]','');
        tDDD := substr(tTmp, 0, 2);
        tTel := substr(tTmp, -8, 8);
        --SELECT COD_USUA INTO tUsu FROM intra.prt_usuario WHERE COD_EMPR = 1 AND TMPSENHA = :new.NOME;
        DELETE FROM intra.prt_usuariotelefone WHERE COD_EMPR = 1 AND COD_USUA = tUsu;
        INSERT INTO intra.prt_usuariotelefone ( COD_USUA,COD_EMPR,COD_USTE,TXDDD_USTE,TXTELEFONE_USTE,TXRAMAL_USTE,TXTIPO_USTE,FGSTATUS_USTE )
          VALUES (tUsu,1,INTRA.S_USTE.nextval,tDDD,tTel,'','C','A');
      END IF;
      END IF;
      tDesc := 'alteracao de usuario: ' || :new.NOME;
    ELSIF DELETING THEN
      tStat := 'E';
      UPDATE intra.prt_usuario SET FGSTATUS_USUA = tStat WHERE COD_EMPR = 1 AND TMPSENHA = :old.NOME;
      tDesc := 'exclusao de usuario: ' || :old.NOME;
    END IF;
  INSERT INTO intra.PRT_ATUALIZACAO VALUES (1,1,1,INTRA.S_ATLZ.nextval,'TRIGGER',1,1,tDesc,SYSDATE,'db');
END flex_user_nbs;
/
